package com.um.springboot.starter.utils;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ByteUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import lombok.experimental.UtilityClass;

/**
 * @author 甘天伟
 * @date 2022/2/11
 * 版权所有 广州优匠科技有限公司
 */
public class OrderUtil {

    /**
     * 封装获取微信订单号
     *
     * @return
     */
    public static String getWxOrderNo() {
        String orderNo = "WX" + getOrderNo();
        return orderNo;
    }

    /**
     * 封装获取提现订单号
     *
     * @return
     */
    public static String getTxOrderNo() {
        String orderNo = "TX" + getOrderNo();
        return orderNo;
    }

    /**
     * 封装获取订单号（15位年月日时分秒毫秒+4位随机数）
     *
     * @return
     */
    public static String getOrderNo() {
        String orderNo = DateUtil.date().toString("yyMMddHHmmssSSS") + RandomUtil.randomNumbers(4);
        return orderNo;
    }

    /**
     * 封装获取预约订单号（15位年月日时分秒毫秒+3位随机数+R标识）
     *
     * @return
     */
    public static String getReserveOrderNo() {
        String orderNo = "1" + DateUtil.date().toString("yyMMddHHmmssSSS") + RandomUtil.randomNumbers(3);
        return orderNo;
    }

    /**
     * 订单号转换成base64字符串
     *
     * @param orderNo
     * @return
     */
    public static String orderNoToBase64(String orderNo) {
        byte[] bytes = ByteUtil.longToBytes(NumberUtil.parseLong(orderNo));
        return Base64.encodeUrlSafe(bytes);
    }

    /**
     * base64字符串转成订单号
     *
     * @param bs64
     * @return
     */
    public static String base64ToOrderNo(String bs64) {
        byte[] bytes = Base64.decode(bs64);
        return NumberUtil.toStr(ByteUtil.bytesToLong(bytes));
    }

}
